#include "ros/ros.h"

/*
    演示时间相关操作
*/


void cd(const ros::TimerEvent &event)
{

}
int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"time");

    ros::NodeHandle nh;//必须创建句柄，如果不创建就不会初始化时间操作，就会导致调用失败

    ros::Time right_now = ros::Time::now();//获取当前时刻并返回，参考系：时间戳

    ROS_INFO("当前时刻是：%.2f",right_now.toSec());
    ROS_INFO("当前时刻是：%d",right_now.sec);

    ros::Time t1(20,20932042);//设置时刻

    ROS_INFO("当前时刻是：%.2f",t1.toSec());

    ros::Time t2(29381.232);
    ROS_INFO("当前时刻是：%.2f",t2.toSec());

//------------------------------------------------------------------------------------------------

    ros::Duration du(5);//可以接受很多类型的数据
    du.sleep();//可以让其停顿du的秒数
//------------------------------------------------------------------------------------------------
    
    ros::Time begin = ros::Time::now();
    ros::Duration du1(5);

    ros::Time stop = begin + du1; //相加操作，四则运算都是运用的操作符重载

    //ros::Time sum = begin + stop;//时刻之间是不可以相加操作的
    
    ros::Duration du2 = begin - stop;//时刻之间可以相减，但是类型不是time的是Duration

    ros::Duration du3 = du1 + du2;//持续时间之间可以相加减

//-----------------------------------------------------------------------------------------------
    
    ros::Rate rate(1);//设置频率

    rate.sleep();

//-----------------------------------------------------------------------------------------------

//定时器类似与rate
    ros::Timer timer = nh.createTimer(ros::Duration(1),cd);//设置定时器
    /*
        第一个参数是时间间隔
        第二个参数是回调函数，用于封装业务
        第三个参数默认是flase，代表是否为一次性的定时器，及，为true只会执行一次回调函数，而false会每个一秒就执行一次
        第四个参数是当前定时器是否启动，默认是true
    */




    ros::spin();
    return 0;
}
